# 创建类的语法  class (类名)():    类名由一个或多个单词组成，且首字母大写这是规范,小写的指的是根据类创建的实例
#              pass（类的具体内容）
#使用类几乎可以模拟任何东西，下面来编写一个表示小狗的简单类Dog,具备两项信息（名字name和年龄age）和两种行为（蹲下sit，打滚roll_over）
#像这样可通过实例访问的亦最称为属性。
'''初始化方法 __init__(self,参数1,参数2,....) ：   双下划线 双下划线 双下划线
名字self可改， python通过调用这个_init_()方法来创建类的实例           '''
'''创建Dog类'''
# 类中的函数称为方法，__init__()方法是一个特殊的方法，为了避免与普通方法发生名称冲突，前后的__不能省，我们将__init__()方法定义成了包含3个初始化参数
# self,name,age.且self必须放在最前面，在创建实例的过程中，将自动传入实参self，每个与类相关连的方法调用都会自动传入实参self，它是一个指向实例本身的引用
# 让实例能够访问类中的属性和方法。每当我们创建实例时，都只需传入最后三个实参（name和age和male）提供值，因为self会自动传入
class Dog():
    #初始化方法（函数）
    def __init__(self,name,age,male):  #  初始化属性（实例属性）name和age和male
        self.name = name               # 初始化属性可通过  实例名.name  实例名.age直接调用
        self.age = age                 # 以self为前缀的对象都可以供类中的所有方法使用
        self.male = male

# Dog类还定义了另外两个方法，sit()和roll_over()。由于这些方法不需要额外的信息，如名字或年龄因此它们只有1个形参self。
# 我们后面将创建的实例能够访问这些方法，当前sit()和roll_over()所做的有限，只是打印一条消息,指出小狗正在蹲下或打滚。但可以扩展这些方法以模拟实际情况:
# 如果这个类包含在一个计算机游戏中，这些方法将句含创建小狗蹲下和打滚动画效果的代码。如果这个类是用于控制机器狗,这此方法将引导机器狗做出蹲下和打滚的动作。
    #实例方法  模拟小狗被命令时蹲下   参数默认为self
    def sit(self):
        print(self.name.title()+' is now sitting')

    # 实例方法  模拟小狗在打滚
    def roll_over(self):
        print(self.name.title()+' is rolling over!')

'''根据类创建实例对象'''#传入的参数为除了self以外的所有初始化属性的参数值
# 实例对象名自己起如 my_dog
my_dog = Dog('tangtang',4,'girl')
print("My dog's name is "+my_dog.name.title()+'.')
print('My dog is '+str(my_dog.age)+' years old,which is a '+my_dog.male+'!')
my_dog.sit()

#创建第二个实例对象your_dog
your_dog = Dog('Lucy',3,'girl')
print("\nyour dog's name is "+your_dog.name.title()+'.')
print('your dog is '+str(your_dog.age)+' years old,which is a '+your_dog.male+'!')
your_dog.roll_over()



